""" 自定义view  表示响应给客户端的数据 """
# 导入响应函数
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import redirect
from myDjango.models import Users
from myDjango.models import Goods
from myDjango.models import Cars
import math


# 设置处理函数
def hw(est):
    return HttpResponse("你好")

def index(request):
    # username = request.GET.get('username')
    # username 值获取 和session关联 uid是否存在
    if request.session.get('uid', None):
        # 有值 True 说明登录过
        username = Users.objects.filter(uid=request.session['uid'])[0].username
    else:
        # 无值
        username = None

    xm = '张三'
    fs = 61
    # 封装
    # good = {'id': 1, 'name': '好东西', 'imgsrc': '/static/img/test2.png', 'price': 9999, 'count': 10}
    # goods = [
    #     {'id': 1, 'name': '好东西', 'imgsrc': '/static/img/test2.png', 'price': 9999, 'count': 10},
    #     {'id': 2, 'name': '西瓜', 'imgsrc': '/static/img/test2.png', 'price': 9999, 'count': 10},
    #     {'id': 3, 'name': '老干妈', 'imgsrc': '/static/img/test2.png', 'price': 9999, 'count': 10},
    #     {'id': 4, 'name': '辣条', 'imgsrc': '/static/img/test2.png', 'price': 9999, 'count': 10}
    # ]

    # 接收前端传递 keywords
    keywords = request.GET.get('keywords')
    if keywords:
        goods = Goods.objects.filter(name__contains=keywords)
    else:
        goods = Goods.objects.all()

    # 给前端传递的页面列表
    # 封装函数range(start,end) 自动生成从start开始（包含）到end结束（不包含）的列表
    # len()方法可获取列表长度，math.ceil()表向上取整
    pagelist = range(1, math.ceil(len(goods)/5)+1)

    # 接收 前端传递的 页码 参数
    page = request.GET.get('page')
    if page:
        # 有值 字符串转换为整型
        page = int(page)
    else:
        # 无值 默认展示第一页
        page = 1
    # 截取数据查询的结果 前四个  列表切片
    goods = goods[4*(page-1):4*page]
    return render(request, "index.html", {"pagelist": pagelist, "xm": xm, "fs": fs, "goods": goods, "username": username})

def login(re):
    if re.POST:
        # print(re.GET.get('username'))
        username = re.POST.get('username')
        userpasswd = re.POST.get('userpasswd')
        result = Users.objects.filter(username=username)
        # print(result[0].username)
        if result:
            # 判断 当前有值的账号对应的和前端发送的密码是否匹配
            if result[0].userpasswd == userpasswd:
                # return HttpResponse('登录成功')
                # 设置session会话存储 uid
                re.session['uid'] = result[0].uid
                return redirect('/index/')
                # return redirect('/index/?username='+result[0].username)
            else:
                return render(re, "login.html")
        else:
            # return HttpResponse('登录失败')
            return render(re, "register.html")
    return render(re, "login.html")

def register(request):
    # 和Get请求作区分
    if request.POST:
        username = (request.POST.get('username'))
        userpasswd = (request.POST.get('userpasswd'))
        # 插入数据库
        # 将用户类 实例化 对象
        # user1 = Users(uid=1, username=username, userpasswd=userpasswd)
        # user1.save()
        Users.objects.create(uid=None, username=username, userpasswd=userpasswd)


    return render(request, "login.html")

def nav(request):

    one = [
        {
            '首页': [
                {'理工农学院': ['计算机科学', '软件工程']}, {'文艺法学院': []}, {'医学院': ['护理学']}, {'经管学院': []}
            ]
        },

        {
            '生活': [{'校园': ['学习']}, {'校外': ['上网', '台球']}, {'家': ['吃饭', '睡觉']}]},
        {
            '活动': [{'篮球': ['扣篮', '跳投']}, {'羽毛球': ['跳杀', '放小球']}]},
        {
            '我的': [{'我': ['great']}, {'你': ['nice']}, {'他': ['good']}]},

    ]

    return render(request, "nav.html", {"one": one})

def detail(request):
    gid = request.GET.get('gid')
    # 根据参数执行数据库操作 条件查询 filter

    # 接收 详情页面加入购物车传递的商品id POST方法
    if request.POST:
        if request.session.get('uid', None):
            gid = request.POST.get('gid')
            uid = request.session['uid']
            # car = Cars(gid=gid, buy_count=1, uid=uid)

            # 间接数据库操作 通过封装好的数据模型
            # 先查询数据库goods表中gid对应商品信息数据 再插入购物车表中
            good = Goods.objects.filter(gid=gid)[0]
            car = Cars(good=good, buy_count=1, uid=uid)
            car.save()
        else:
            return redirect('/login/')
    # 根据参数执行数据库操作 条件查询 filter
    goods = Goods.objects.filter(gid=gid)
    # 作区分
    # 接收 详情页面加入购物车传递的商品id(对应前端a标签，get方法)
    # car_gid = request.GET.get('car_gid')
    # if car_gid:
    #     # 根据参数执行数据库操作 插入数据
    #     Cars.objects.create(cid=None, gid=car_gid, buy_count=1)
    #     goods = Goods.objects.filter(gid=car_gid)
    return render(request, 'detail.html', {'goods': goods})

def cart(request):
    # 先判断 是否登录 用request。session对象中是否存在建uid的值
    if request.session.get('uid', None):
        # 获取 session 中的uid
        uid = request.session['uid']
        # 数据库操作 查询操作购物车表
        cars = Cars.objects.filter(uid=uid)

        # 数据库查询结果cars[{cid,gid,buy_count,uid}, ...]
        # 修改后 数据库查询结果cars[{cid,good,buy_count,uid}, ...]
        goods = []  # 设定 响应前端页面的所有购物车商品数据的列表
        for item in cars:  # item {cid,good,buy_count,uid}
            # good = Goods.objects.filter(gid=item.gid)[0]
            # good {gid,name,price,count,imgsrc}
            good = item.good
            good.buy_count = item.buy_count
            good.allprice = good.price * good.buy_count
            goods.append(good)
        return render(request, 'cart.html', {'goods': goods})
    else: # 无值 说明没有登录
        return redirect('/login/')

def loginout(request):
    # 业务处理 --> 数据处理
    # 修改数据库值   都可以退出登录，但是只是删除了session对象中uid键值对 实质对数据库中session表修改session_data字段值
    # request.session.pop('uid')
    # del request.session['uid']
    # request.session.clear()

    # 删除  数据库中session表对应记录/数据
    # request.session.delete(request.session.session_key)
    request.session.flush()
    return redirect('/index')

